<?Php

    /**
     * Model-компонент модели MVC
     */

    interface ModInt {
        public static function getData ();                      // собираем служебную информацию - меню, логин и т.п.
        public static function proceedData( $request );         // обрабатываем информацию, которая к нам пришла в реквестах
        public static function getPage( $section );             // получаем информацию о запрашиваемой странице
    }


    // Model-компонент модели MVC
    class Model implements ModInt {
        
        private $data;





        /**
         * собираем служебную информацию - меню, логин и т.п.
         */
        public static function getData( ){
            $pref = preferences::getInstance();
            $loginData = $pref -> getProperty ( 'loginData' );
            $data['loginData'] = $pref -> getProperty ( 'loginData' );
            $data['messageString'] = $pref->getProperty('messageString');
            $data['url'] = $pref->getProperty('url');
            $data['params'] = $pref->getProperty('params');
            $data['pageId'] = $pref->getProperty('pageId');
            $data['parentId'] = $pref->getProperty('parentId');
            $data['pageLang'] = $pref->getProperty('pageLang');
            $pdo = $pref -> getProperty( 'pdo' );

            // формируем дерево меню
            $page = select_data($pdo, DB_MODEL_PAGES . ' AS pa', '*', "`type`='menu_chapter'
                                    " . makePrivQuery(round($data['loginData']['priv']['privileges']), $data['loginData']['account']) . "
                                    AND `stand_alone`=1 AND `enabled`=1",
                                    '`id`');
            foreach ($page as $v)
                $data['menu'][$v['pid']][] = $v;

            return $data;
        } // getData






        /**
         * здесь обрабатываем информацию, которая к нам пришла в реквестах
         */
        public static function proceedData( $request ){
            $pref = preferences::getInstance();
            $loginData = $pref -> getProperty ( 'loginData' );
            $pdo = $pref -> getProperty( 'pdo' );
            $error=false; // флаг ошибок

            $act = select_row($pdo, DB_MODEL_ACTIONS . ' AS pa', '*', "`action` = '" . ekran($request['action']) . "'
                                    " . makePrivQuery($loginData['priv']['privileges'], $loginData['account']) . "
                                    AND `enabled`=1");

            if ($act){
                header("Content-Type: text/html; charset=utf-8"); // чтобы никаких этих ваших cp1251

                $lt = $page['lifetime_reged'];
                if (empty($_COOKIE[session_name()]))$lt = $page['lifetime_unreged'];
    
                // время жизни страницы - нужно преимущественно для nginx
                if ($lt == 0){
                    header("Cache-Control: no-cache, must-revalidate");
                    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
                }
                else{
                    header("Date: ".gmdate("D, d M Y H:i:s", time())." GMT"); 
                    header("Last-Modified: ".gmdate("D, d M Y H:i:s", time())." GMT");; 
                    header("Expires: ".gmdate("D, d M Y H:i:s", time() + $lt)." GMT");
                    header("Cache-Control: max-age={$lt}, public");
                }
                
                if ($act['plugin_id']>0){
                    $plugIns = $pref -> getProperty('plugInsInfo');
                    $folder = $plugIns[$act['plugin_id']]['folder'];
                    if (!defined('MODULE_ID') AND $act['plugin_id'])define('MODULE_ID', $act['plugin_id']);
                    $filepath = dirname(__FILE__) . '/' . $folder . '/models/_actions/';
                    if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions.php'))
                        require_once((dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions.php'));
                }
                else
                    $filepath = dirname(__FILE__) . '/include/models/_actions/';
                $filepath = str_replace('/', DIRECTORY_SEPARATOR, $filepath);
                $filepath = str_replace('\\', DIRECTORY_SEPARATOR, $filepath);
                if (file_exists($filepath . $act['model']))require_once ( $filepath . $act['model'] );
                if ($act['not_proceed']==1)die();
            }

            if ($request['urltogo'] AND $loginData['priv']['email'] AND strpos($_REQUEST['urltogo'],'logout')===false)
                go_to($request['urltogo']);
        } // proceedData





        /**
         * получаем информацию о запрашиваемой странице
         */
        public static function getPage( $section ){
            $pref = preferences::getInstance();
            $pdo = $pref -> getProperty( 'pdo' );
            $loginData = $pref -> getProperty ( 'loginData' );

            $page = select_data($pdo, DB_MODEL_PAGES, '*', "`id`=".$section);
            $page = $page[0];

            if ($page['content_filename'] != '') $page['outter_file']=true;
            if ($page['content'] != '') $page['inner_content']=true;

            if ($page['has_any_actions'] == '1'){
                if ($page['plugin_id']>0){
                    $plugIns = $pref -> getProperty('plugInsInfo');
                    $folder = $plugIns[$page['plugin_id']]['folder'];
                    $filepath = dirname(__FILE__) . '/' . $folder . '/models/_pages/';
                    if (!defined('MODULE_ID') AND $page['plugin_id'])define('MODULE_ID', $page['plugin_id']);
                    if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions.php'))
                        require_once((dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions.php'));
                }
                else
                    $filepath = dirname(__FILE__) . '/include/models/_pages/';
                $filepath = str_replace('/', DIRECTORY_SEPARATOR, $filepath);
                $filepath = str_replace('\\', DIRECTORY_SEPARATOR, $filepath);
                if (file_exists($filepath . $page['content_filename'] . '.model'))
                    require_once ( $filepath . $page['content_filename'] . '.model' );
            }
            // инклудили модель-компонент
            
            return $page;
        } // getPage


    } // class Model

?>